UniCommon機能解説 - Asyncs
Asyncsは、非同期処理を簡単に実行するためのクラスです
デバイスのコア数に最適化されたスレッドプールを使い、並列処理を行います
Unityのメインスレッドを阻害することなく、安全に非同期処理を実行できます
Asyncs.Execute
ActionもしくはFunc<T>を引数に渡し、バックグラウンドで非同期処理を実行します
code:cs
// 返り値なし
Asyncs.Execute(() => {
// ファイルIOとかの重い処理
}, () => {
// 完了。メインスレッドで受け取れる。
});
code:cs
// 返り値あり
Asyncs.Execute(() => {
// 重い計算?
return 1
}, result => {
// result => 1。メインスレッド
});
内部では、UniRxのShceduler.ThreadPoolを利用しているので、IObservable<T>を返すメソッドもあります
コールバックを渡さないExecuteメソッドは、IObservable<T>を返します。
code:cs
Asyncs.Execute(() => {
Files.TryWrite("./hoge.json", data);
}).Subscribe(_ => {
// 書き込み完了。バックグラウンドスレッド。
});
code:cs
Asyncs.Execute(() => {
Thread.Sleep(200);
return 123;
}).SubscribeOnMainThread()
.Subscribe(i => {
Debug.Log(i); // 123。メインスレッド。
});
用途に合わせて使い分けると良いと思います